home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / Math / test / testMath_Fibonacci.php next >
PHP Script  |  2004-03-24  |  3KB  |  102 lines

  1. <?php
  2. // $Id: testMath_Fibonacci.php,v 1.1 2003/01/02 01:57:00 jmcastagnetto Exp $
  3. include_once 'Math/Fibonacci.php';
  4.  
  5. $idx = 20;
  6. echo "Calculate F($idx), fast equation = ";
  7. $fib =& Math_Fibonacci::term($idx);
  8. echo $fib->toString()."\n";
  9.  
  10. $idx = 55;
  11. echo "Calculate F($idx), lookup table = ";
  12. $fib =& Math_Fibonacci::term($idx);
  13. echo $fib->toString()."\n";
  14.  
  15. $idx = 502;
  16. echo "Calculate F($idx), addition loop = ";
  17. $fib = Math_Fibonacci::term($idx);
  18. echo $fib->toString()."\n";
  19.  
  20. echo "\nSeries from F(0) to F(10):\n";
  21. $series = Math_Fibonacci::series(10);
  22. foreach ($series as $n=>$fib) {
  23.     echo "n = $n, F(n) = ".$fib->toString()."\n";
  24. }
  25.  
  26. echo "\nand now from F(11) to F(19):\n";
  27. $series = Math_Fibonacci::series(11, 19);
  28. foreach ($series as $n=>$fib) {
  29.     echo "n = $n, F(n) = ".$fib->toString()."\n";
  30. }
  31.  
  32. echo "\nChecking if 26 and 4181 are Fibonacci numbers\n";
  33. $verb = Math_Fibonacci::isFibonacci(new Math_Integer(26)) ? 'is' : 'is not';
  34. echo "26 $verb a Fibonacci number\n";
  35. $verb = Math_Fibonacci::isFibonacci(new Math_Integer(4181)) ? 'is' : 'is not';
  36. echo "4181 $verb a Fibonacci number\n";
  37.  
  38. echo "\nDecompose 34512\n";
  39. $decarr = Math_Fibonacci::decompose(new Math_Integer(34512));
  40. foreach ($decarr as $fib) {
  41.     $index = Math_Fibonacci::getIndexOf($fib);
  42.     echo "F(".$index->toString().") = ".$fib->toString()."\n";
  43. }
  44.  
  45. echo "\nF(n) closest to 314156 is: ";
  46. $fib = Math_Fibonacci::closestTo(new Math_Integer(314156));
  47. echo $fib->toString()."\n\n";
  48.  
  49. echo 'The index for 1597 is : ';
  50. $idx = Math_Fibonacci::getIndexOf(new Math_Integer(1597));
  51. echo $idx->toString()."\n\n";
  52.  
  53. $bigint = '3141579834521345220291';
  54. echo "Finding the Fibonacci numbers that add up to $bigint\n";
  55. $series = Math_Fibonacci::decompose(new Math_Integer($bigint));
  56. foreach ($series as $fib) {
  57.     $index = Math_Fibonacci::getIndexOf($fib);
  58.     echo "F(".$index->toString().") = ".$fib->toString()."\n";
  59. }
  60.  
  61.  
  62. // Benchmark below requires PEAR::Benchmark, PEAR::Math_Stats
  63. // and PEAR::Math_Histogram
  64. $benchmark = false;
  65.  
  66. if ($benchmark) {
  67.     require_once 'Benchmark/Iterate.php';
  68.     require_once 'Math/Histogram.php';
  69.  
  70.     // benchmark the fast algorithm
  71.     $index = 45;
  72.     // benchmark the lookup table
  73.     //$index = 100;
  74.     // benchmark the addition loop
  75.     //$index = 1000;
  76.     $runs = 2000;
  77.     $bench =& new Benchmark_Iterate();
  78.     echo "\n\nBenchmarking:\n";
  79.     echo "Calculating F($index) $runs times = ".$index."\n";
  80.     $bench->run($runs, 'Math_Fibonacci::term', $index);
  81.     $res1 = $bench->get();
  82.  
  83.     // get some basic stats and clean up arrays for Math_Histogram
  84.     echo "term($index)  : avg time = {$res1['mean']} ({$res1['iterations']})\n";
  85.     unset($res1['mean']);
  86.     unset($res1['iterations']);
  87.     echo '----> max: '.max($res1).', min: '.min($res1).', count: '.count($res1)."\n";
  88.  
  89.     echo "\nFull Stats\n";
  90.     echo "term($index)\n";
  91.     $h = new Math_Histogram();
  92.     $h->setData($res1);
  93.     $h->calculate();
  94.     echo $h->printHistogram();
  95.     print_r($h->getDataStats());
  96.     echo $h->toSeparated();
  97. }
  98.  
  99. // vim: ts=4:sw=4:et:
  100. // vim6: fdl=0:
  101. ?>
  102.